package com.async.config;

import com.async.dto.ProxyMethodDto;
import com.async.util.Md5Util;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * <p>
 * 异步方法容器
 * </p>
 * @author yang
 * @date 2024/5/16
 */
@Component
public class AsyncProxyContext {
    private static final Map<String, ProxyMethodDto> PROXY_METHOD_MAP = new ConcurrentHashMap<>();

    public String getAsyncMethodKey(Object bean, Method method) {
        if (method.toString().contains(bean.getClass().getName())) {
            // 异步执行注解在当前类方法上面
            return Md5Util.md5(method.toString());
        } else {
            // 异步执行注解在基类方法上面
            return Md5Util.md5(bean.getClass().getSimpleName() + "#" + method);
        }
    }

    public void setAsyncMethod(String key, ProxyMethodDto proxyMethodDto) {
        PROXY_METHOD_MAP.put(key, proxyMethodDto);
    }

    public ProxyMethodDto getAsyncMethod(String key) {
        return PROXY_METHOD_MAP.get(key);
    }
}
